{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING: Logging before flag parsing goes to stderr.\n",
      "W0825 17:15:33.787837 139691745253184 deprecation.py:323] From <ipython-input-1-c538aac0e940>:9: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "W0825 17:15:33.788710 139691745253184 deprecation.py:323] From /home/jason/opt/anaconda3/lib/python3.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "W0825 17:15:33.789740 139691745253184 deprecation.py:323] From /home/jason/opt/anaconda3/lib/python3.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-images-idx3-ubyte.gz\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0825 17:15:34.032273 139691745253184 deprecation.py:323] From /home/jason/opt/anaconda3/lib/python3.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "W0825 17:15:34.036028 139691745253184 deprecation.py:323] From /home/jason/opt/anaconda3/lib/python3.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:110: dense_to_one_hot (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.one_hot on tensors.\n",
      "W0825 17:15:34.086044 139691745253184 deprecation.py:323] From /home/jason/opt/anaconda3/lib/python3.7/site-packages/tensorflow/contrib/learn/python/learn/datasets/mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000, 10)\n",
      "(5000, 784)\n",
      "(5000, 10)\n",
      "(10000, 784)\n",
      "(10000, 10)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)\n",
    "\n",
    "mnist = input_data.read_data_sets(\"./\", one_hot=True)\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#显示图片\n",
    "plt.figure(figsize=(8, 8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4, 4, idx + 1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(np.argmax(mnist.train.labels[idx])))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28, 28)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义用于训练的网络\n",
    "x = tf.placeholder(\"float\", [None, 784], name='x')\n",
    "y = tf.placeholder(\"float\", [None, 10], name='y')\n",
    "\n",
    "#将一维向量还原维二维图片\n",
    "x_image = tf.reshape(x, [-1, 28, 28, 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0825 17:15:35.215785 139691745253184 deprecation.py:323] From /home/jason/opt/anaconda3/lib/python3.7/site-packages/tensorflow/contrib/layers/python/layers/layers.py:1634: flatten (from tensorflow.python.layers.core) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use keras.layers.flatten instead.\n"
     ]
    }
   ],
   "source": [
    "#定义第一个卷积层，使用6个5×5的卷积核对输入数据进行卷积，padding方式选择valid，卷积激活函数为relu\n",
    "with tf.name_scope('conv1'):\n",
    "    C1 = tf.contrib.slim.conv2d(\n",
    "        x_image, 6, [5, 5], padding='VALID', activation_fn=tf.nn.relu)\n",
    "    \n",
    "#进行stride为2的最大池化\n",
    "with tf.name_scope('pool1'):\n",
    "    S2 = tf.contrib.slim.max_pool2d(C1, [2, 2], stride=[2, 2], padding='VALID')\n",
    "    \n",
    "#定义第二个卷积层，使用16个5×5的卷积核对输入数据进行卷积，padding方式选择valid，卷积激活函数为relu\n",
    "with tf.name_scope('conv2'):\n",
    "    C3 = tf.contrib.slim.conv2d(\n",
    "        S2, 16, [5, 5], padding='VALID', activation_fn=tf.nn.relu)\n",
    "\n",
    "#进行stride为2的最大池化\n",
    "with tf.name_scope('pool2'):\n",
    "    S4 = tf.contrib.slim.max_pool2d(C3, [2, 2], stride=[2, 2], padding='VALID')\n",
    "    \n",
    "with tf.name_scope('fc1'):\n",
    "    S4_flat = tf.contrib.slim.flatten(S4)\n",
    "    C5 = tf.contrib.slim.fully_connected(\n",
    "        S4_flat, 120, activation_fn=tf.nn.relu)\n",
    "\n",
    "with tf.name_scope('fc2'):\n",
    "    F6 = tf.contrib.slim.fully_connected(C5, 84, activation_fn=tf.nn.relu)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0825 17:15:35.677493 139691745253184 deprecation.py:506] From <ipython-input-5-f080cb293d8c>:4: calling dropout (from tensorflow.python.ops.nn_ops) with keep_prob is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use `rate` instead of `keep_prob`. Rate should be set to `rate = 1 - keep_prob`.\n"
     ]
    }
   ],
   "source": [
    "#对特征添加一个0.6的dropout，以40%的概率丢弃特征中的某些数据    \n",
    "with tf.name_scope('dropout'):\n",
    "    keep_prob = tf.placeholder(name='keep_prob', dtype=tf.float32)\n",
    "    F6_drop = tf.nn.dropout(F6, keep_prob)\n",
    "\n",
    "with tf.name_scope('fc3'):\n",
    "    logits = tf.contrib.slim.fully_connected(F6_drop, 10, activation_fn=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0825 17:15:35.720583 139691745253184 deprecation.py:323] From <ipython-input-6-d8fe82813a26>:3: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "\n",
      "Future major versions of TensorFlow will allow gradients to flow\n",
      "into the labels input on backprop by default.\n",
      "\n",
      "See `tf.nn.softmax_cross_entropy_with_logits_v2`.\n",
      "\n",
      "I0825 17:15:35.771520 139691745253184 summary_op_util.py:66] Summary name Conv/weights:0 is illegal; using Conv/weights_0 instead.\n",
      "I0825 17:15:35.774107 139691745253184 summary_op_util.py:66] Summary name Conv/biases:0 is illegal; using Conv/biases_0 instead.\n",
      "I0825 17:15:35.776319 139691745253184 summary_op_util.py:66] Summary name Conv_1/weights:0 is illegal; using Conv_1/weights_0 instead.\n",
      "I0825 17:15:35.779459 139691745253184 summary_op_util.py:66] Summary name Conv_1/biases:0 is illegal; using Conv_1/biases_0 instead.\n",
      "I0825 17:15:35.782271 139691745253184 summary_op_util.py:66] Summary name fully_connected/weights:0 is illegal; using fully_connected/weights_0 instead.\n",
      "I0825 17:15:35.786969 139691745253184 summary_op_util.py:66] Summary name fully_connected/biases:0 is illegal; using fully_connected/biases_0 instead.\n",
      "I0825 17:15:35.789717 139691745253184 summary_op_util.py:66] Summary name fully_connected_1/weights:0 is illegal; using fully_connected_1/weights_0 instead.\n",
      "I0825 17:15:35.791818 139691745253184 summary_op_util.py:66] Summary name fully_connected_1/biases:0 is illegal; using fully_connected_1/biases_0 instead.\n",
      "I0825 17:15:35.793774 139691745253184 summary_op_util.py:66] Summary name fully_connected_2/weights:0 is illegal; using fully_connected_2/weights_0 instead.\n",
      "I0825 17:15:35.795773 139691745253184 summary_op_util.py:66] Summary name fully_connected_2/biases:0 is illegal; using fully_connected_2/biases_0 instead.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Conv/weights:0\n",
      "Conv/biases:0\n",
      "Conv_1/weights:0\n",
      "Conv_1/biases:0\n",
      "fully_connected/weights:0\n",
      "fully_connected/biases:0\n",
      "fully_connected_1/weights:0\n",
      "fully_connected_1/biases:0\n",
      "fully_connected_2/weights:0\n",
      "fully_connected_2/biases:0\n"
     ]
    }
   ],
   "source": [
    "#定义loss和用于优化网络的优化器\n",
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "l2_loss = tf.add_n([\n",
    "    tf.nn.l2_loss(w)\n",
    "    for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)\n",
    "])\n",
    "\n",
    "for w in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES):\n",
    "    print(w.name)\n",
    "    tf.summary.histogram(w.name, w)\n",
    "    \n",
    "total_loss = cross_entropy_loss + 7e-5 * l2_loss\n",
    "tf.summary.scalar('cross_entropy_loss', cross_entropy_loss)\n",
    "tf.summary.scalar('l2_loss', l2_loss)\n",
    "tf.summary.scalar('total_loss', total_loss)\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=0.3).minimize(total_loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "#将输出的结果与正确结果进行对比，得到我们网络输出结果的准确率\n",
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(y, 1), tf.argmax(logits, 1))\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#使用saver用于保存或恢复训练的模型\n",
    "batch_size = 100\n",
    "trainig_step = 1100\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.381824, the validation accuracy is 0.9252\n",
      "after 200 training steps, the loss is 0.162694, the validation accuracy is 0.9576\n",
      "after 300 training steps, the loss is 0.22032, the validation accuracy is 0.9578\n",
      "after 400 training steps, the loss is 0.174841, the validation accuracy is 0.9686\n",
      "after 500 training steps, the loss is 0.175921, the validation accuracy is 0.9736\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0825 17:15:48.329362 139691745253184 deprecation.py:323] From /home/jason/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/training/saver.py:960: remove_checkpoint (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to delete files with this prefix.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 600 training steps, the loss is 0.096953, the validation accuracy is 0.9768\n",
      "after 700 training steps, the loss is 0.148765, the validation accuracy is 0.9784\n",
      "after 800 training steps, the loss is 0.154378, the validation accuracy is 0.9754\n",
      "after 900 training steps, the loss is 0.0483489, the validation accuracy is 0.9812\n",
      "after 1000 training steps, the loss is 0.222709, the validation accuracy is 0.9764\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9802\n"
     ]
    }
   ],
   "source": [
    "#创建session，运行计算图\n",
    "merged = tf.summary.merge_all()\n",
    "with tf.Session() as sess:\n",
    "\n",
    "    writer = tf.summary.FileWriter(\"logs/\", sess.graph)\n",
    "\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "        keep_prob: 1.0\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels, keep_prob: 1.0}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss, rs = sess.run(\n",
    "            [optimizer, cross_entropy_loss, merged],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                keep_prob: 0.6\n",
    "            })\n",
    "        writer.add_summary(rs, i)\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "W0825 17:15:58.749851 139691745253184 deprecation.py:323] From /home/jason/opt/anaconda3/lib/python3.7/site-packages/tensorflow/python/training/saver.py:1276: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "I0825 17:15:58.760058 139691745253184 saver.py:1280] Restoring parameters from ./model.ckpt-1000\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#验证\n",
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16],\n",
    "                keep_prob: 1.0\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(\n",
    "                np.argmax(mnist.test.labels[idx]), order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 卷积的特性描述20分。 \n",
    "一、局部相关性：（1）相邻的像素结合起来表达一个特征，距离较远的像素影响较小。（2）随着层数的增加，feature map里面的点映射到原图的感受野越来越大。（3）不仅仅可以适用于图像，其他具有局部相关性的数据均可以尝试卷积网络处理。（4）带来一定的遮挡不变性。\n",
    "二、参数共享：使用同一卷积核在任意图像数据上进行滑动，生成特征图。\n",
    "三、平移宽容：在任何位置都可以激活神经元。\n",
    "四、缩放宽容：一定程度内的图像缩放（通常认为25%以内）不会产生太大干扰。\n",
    "五、少许降维：例如10x10的图像，用5x5的卷积核，采用valid方式（padding=0），stride=2，输出feature map为：\n",
    "floor((10 – 5 + 0*2)/2) + 1 = 3 x 3\n",
    "六、对输入尺寸不做要求：（1）全连接里面，权重W的尺寸是由输入决定的。（2）卷积核的尺寸只与网络设计有关，与输入没有任何关系。（3）卷积核固定的情况下，feature的尺寸是随着输入变化的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 为什么卷积的效果要比全连接网络好，给出至少2点理由，每点10分。\n",
    "1.图像变大导致色彩数变多，全连接神经网络不好解决：对于MNIST数据，每一张图片的大小是28x28x1，其中28x28代表的是图片的大小，1表示图像是黑白的，有一个色彩通道。假设第一层隐藏层的节点数为500个，那么一个全连接层的神经网络有28x28x500+500=392500个参数，而且有的图片会更大或者是彩色的图片，这时候参数将会更多。如果图像的像素更大，则需要学习的参数量会更多，不仅消耗大量的内存，同时也需要大量的运算。而卷积神经网络就可以解决这个问题。\n",
    "2.全连接网络不方便处理高维数据：对于比较复杂的高维数据，如果按照全连接的方法，则只能通过增加节点，增加层数的方式来解决。因为由于隐藏层神经网络使用的是sigmoid或tanh激活函数，其反向传播的有效层数也只能在4~6层左右。所以，层数再多只会使反向传播的修正值越来越小，网络无法训练。而卷积神经网络使用了参数共享的方式，不仅在准确率上大大提升，也把参数降了下来。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
